/**
 *
 * 2） a.type 和 链式调用得例子
 * 对于
 * class A
 * val a = new A
 * val b = new A
 * a.type == b.type // false
 *
 *
 * 链式调用得例子中 用到得最多
 */

class A {
  private var name: String  = null
//  def setName(name:String) = {
  def setName(name:String) :this.type = {
    this.name = name
    this // 返回当前对象
  }
}

class B extends A {
  private var age: Int  = 0
  def setAge(age:Int) = {
    this.age = age
    this // 返回当前对象
  }
}


object ClassApp02 extends App {

  val a = new A
  val b = new B
  b.setAge(19).setName("OK") // OK
  b.setName("OK").setAge(19) // 无法执行，编译错误，因为 setName返回得是A类型对象当然没有B得setAge方法

  // def setName(name:String) :this.type = {
  // 解决问题，因为 this.type 表示指定当前运行时得实例对象类型


}